The possibilities for parallel computing have greatly increased with the availability of multiprocessor systems. A multiprocessor system increases processing throughput by executing tasks or processes on two or more processors. Depending on the multiprocessor system design, these tasks may run on several or several hundred processors concurrently.
Managing concurrent execution on multiprocessor systems involves safeguarding data from modification by multiple processes. Indeterminate results, deadlocks, and data corruption may result if multiple tasks modify or access the same dataset. Accordingly, concurrent execution conditions on multiprocessor systems are managed to assure the proper access of data.
Conventional solutions resolve concurrent execution conditions using different types of locks or dividing processes into multiple domains. For example, fine-grained locking manages concurrent execution on multiple processors by dividing a task into many smaller pieces of code. Placing locks around these small pieces of code keeps them from being accessed or modified by other tasks. On the other hand, coarse-grained symmetric multiprocessor (CSMP) operates differently from the fine-grained locking approach. Instead of using locks, CSMP divides tasks (e.g., threads) along functional barriers into domains of tasks having similar functionality. The functional barriers represent a logical separation of tasks into different domains where these tasks can be run in parallel on different processors without conflict, with minimal sharing of data, and with minimal use of locks.
In CSMP, the number of threads in any domain is fixed. That is, the number of threads is constant for each particular domain. As a result, a fixed number of processors is allocated to execute threads associated with each domain. The hard coding of a fixed number of threads for each domain may create bottlenecks for the execution of threads associated with particular domains during heavy workloads. Alternatively, the hard coding may also create conditions where the processors become underutilized, thereby resulting in non-optimal use of the processors.